import translators as ts
import re

class TranslatorEngine:
    def __init__(self):
        # 支持的语言映射
        self.language_map = {
            'zh': '中文',
            'en': '英文',
            'ja': '日文',
            'ko': '韩文',
            'fr': '法文',
            'de': '德文',
            'es': '西班牙文',
            'ru': '俄文',
            'pt': '葡萄牙文',
            'it': '意大利文',
            'ar': '阿拉伯文',
            'hi': '印地文',
            'th': '泰文',
            'vi': '越南文',
            'auto': '自动检测'
        }
        
        # 支持的翻译服务
        self.translators = ['bing', 'google', 'youdao', 'baidu']
        self.default_translator = 'bing'
        
    def detect_language(self, text):
        """检测文本语言"""
        # 各种语言的字符模式
        patterns = {
            'zh': re.compile(r'[\u4e00-\u9fff]'),  # 中文字符
            'ja': re.compile(r'[\u3040-\u309f\u30a0-\u30ff]'),  # 日文平假名和片假名
            'ko': re.compile(r'[\uac00-\ud7af]'),  # 韩文字符
            'ar': re.compile(r'[\u0600-\u06ff]'),  # 阿拉伯字符
            'ru': re.compile(r'[\u0400-\u04ff]'),  # 俄文字符
            'th': re.compile(r'[\u0e00-\u0e7f]'),  # 泰文字符
            'hi': re.compile(r'[\u0900-\u097f]'),  # 印地文字符
            'en': re.compile(r'[a-zA-Z]'),  # 英文字符
            'de': re.compile(r'[äöüßÄÖÜ]'),  # 德语特殊字符
            'fr': re.compile(r'[àâäçéèêëïîôùûüÿñæœ]'),  # 法语特殊字符
            'es': re.compile(r'[ñáéíóúü]'),  # 西班牙语特殊字符
            'it': re.compile(r'[àèéìòù]'),  # 意大利语特殊字符
            'pt': re.compile(r'[áàâãéêíóôõúç]'),  # 葡萄牙语特殊字符
            'vi': re.compile(r'[àáạảãâầấậẩẫăằắặẳẵèéẹẻẽêềếệểễìíịỉĩòóọỏõôồốộổỗơờớợởỡùúụủũưừứựửữỳýỵỷỹđ]')  # 越南语特殊字符
        }
        
        # 计算每种语言的字符数
        counts = {}
        for lang, pattern in patterns.items():
            counts[lang] = len(pattern.findall(text))
        
        # 找出字符数最多的语言
        max_lang = max(counts, key=counts.get)
        
        # 如果没有检测到任何特定语言的字符，默认为英文
        if counts[max_lang] == 0:
            return 'en'
        
        return max_lang
    
    def translate_text(self, text, source_lang='auto', target_lang='zh', translator=None):
        try:
            if not text or not text.strip():
                return {
                    "success": False,
                    "error": "文本不能为空",
                    "translated_text": ""
                }
            
            # 清理文本
            text = text.strip()
            
            # 自动检测源语言
            if source_lang == 'auto':
                source_lang = self.detect_language(text)
            
            # 如果源语言和目标语言相同，直接返回原文
            if source_lang == target_lang:
                return {
                    "success": True,
                    "translated_text": text,
                    "source_lang": source_lang,
                    "target_lang": target_lang
                }
            
            # 选择翻译服务
            translator = translator or self.default_translator
            if translator not in self.translators:
                translator = self.default_translator
            
            # 执行翻译
            translated = ts.translate_text(
                text,
                to_language=target_lang,
                from_language=source_lang if source_lang != 'auto' else None,
                translator=translator
            )
            
            return {
                "success": True,
                "translated_text": translated,
                "source_lang": source_lang,
                "target_lang": target_lang,
                "translator": translator
            }
            
        except Exception as e:
            # 如果当前翻译服务失败，尝试其他服务
            for alt_translator in self.translators:
                if alt_translator != translator:
                    try:
                        translated = ts.translate_text(
                            text,
                            to_language=target_lang,
                            from_language=source_lang if source_lang != 'auto' else None,
                            translator=alt_translator
                        )
                        
                        return {
                            "success": True,
                            "translated_text": translated,
                            "source_lang": source_lang,
                            "target_lang": target_lang,
                            "translator": alt_translator,
                            "fallback": True
                        }
                    except:
                        continue
            
            return {
                "success": False,
                "error": f"翻译失败: {str(e)}",
                "translated_text": ""
            }
    
    def get_supported_languages(self):
        """获取支持的语言列表"""
        return {
            'zh': '中文 (Chinese)',
            'en': '英文 (English)',
            'ja': '日文 (Japanese)',
            'ko': '韩文 (Korean)',
            'fr': '法文 (French)',
            'de': '德文 (German)',
            'es': '西班牙文 (Spanish)',
            'ru': '俄文 (Russian)',
            'pt': '葡萄牙文 (Portuguese)',
            'it': '意大利文 (Italian)',
            'ar': '阿拉伯文 (Arabic)',
            'hi': '印地文 (Hindi)',
            'th': '泰文 (Thai)',
            'vi': '越南文 (Vietnamese)'
        }
    
    def get_supported_translators(self):
        """获取支持的翻译服务"""
        return {
            'bing': '微软Bing翻译',
            'google': 'Google翻译',
            'youdao': '有道翻译',
            'baidu': '百度翻译'
        }

# 创建全局实例
translator_engine = TranslatorEngine()